package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

/**
 * JDK8之后，java集合提供流式API，提供了一个类Stream
 * 操作模式与IO中的流式操作类似。
 */
public class StreamDemo1 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        for(int i=0;i<10;i++){
            list.add(random.nextInt(10));
        }
        System.out.println(list);
        /*
            集合提供了stream()方法，返回一个Stream实例。
            这里Stream想象为"流动",流动的是集合中的每个元素

            Stream提供了很多操作(类似在低级流上添加高级流的操作)
            中间环节:(各种高级流加工)
            map:用于将集合中每个元素进行处理，变成给定lambda表达式处理后的元素
            filter:在流上添加一个过滤器，仅接受流中满足过滤器要求的元素
            distinct:可以将流中元素去重
            sorted:对流中的元素进行排序

            终端环节:
            collect:用于接收最终Stream处理完毕的所有数据
         */
        //将每个元素扩大3倍
        List<Integer> list2 = list.stream().map(e->e*3).collect(Collectors.toList());
        System.out.println(list2);

        //找到集合中所有的偶数
        List<Integer> list3 = list.stream().filter(e->e%2==0).collect(Collectors.toList());
        System.out.println(list3);

        //将每个元素扩大3倍并获取所有偶数
        List<Integer> list4 = list.stream().filter(e->e%2==0).map(e->e*3).collect(Collectors.toList());
        System.out.println(list4);

        //将集合中的重复值去除
        List<Integer> list5 = list.stream().distinct().collect(Collectors.toList());
        System.out.println(list5);

        //对集合排序
//        List<Integer> list6 = list.stream().sorted().collect(Collectors.toList());
        List<Integer> list6 = list.stream().sorted((e1,e2)->e2-e1).collect(Collectors.toList());
        System.out.println(list6);

        //将集合每个元素扩大3倍，并获取所有的偶数，且去除重复值，然后降序
        List<Integer> list7 = list.stream().map(e->e*3)
                              .filter(e->e%2==0)
                              .distinct().sorted((e1,e2)->e2-e1)
                              .collect(Collectors.toList());
        System.out.println(list7);

    }
}
